package com.bawei.nfirewalldemo;

import androidx.appcompat.app.AppCompatActivity;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.Toast;

/**
 * 黑名单：不允许访问的网址
 * 白名单：只允许访问的网址
 *
 * 1.请求数据：Hook Okhttp的connnect方法
 * 2.webview加载网页：Hook WebView的loadUrl方法
 */
public class MainActivity extends AppCompatActivity {
    private EditText et;
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et = (EditText) findViewById(R.id.et);
        webView = (WebView) findViewById(R.id.web_view);

        //hook某个方法 WebView的loadUrl方法，参数是String类型
        //beforeHookedMethod():方法执行前判断请求的网址是不是bilibili，如果是换成百度 ，如果不是放行
        XposedHelpers.findAndHookMethod(WebView.class,
                "loadUrl",String.class,new XC_MethodHook() {
                    @Override
                    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                        String sourceParam = (String) param.args[0];
                        //黑名单思想：bilibili不行
//                        if(sourceParam.contains("search.bilibili.com")){
//                            param.args[0]="https://www.baidu.com";
//                        }
                        //白名单思想：只允许bilibili
                        if(!sourceParam.contains("search.bilibili.com")){
                            param.args[0]="https://www.baidu.com";
                        }
                        super.beforeHookedMethod(param);
                    }
                });

        //hook String的replace方法
        XposedHelpers.findAndHookMethod(String.class,"replace",CharSequence.class,CharSequence.class,new XC_MethodHook(){
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                param.args[1] = "AA";
                super.beforeHookedMethod(param);
            }
        });
    }

    public void load(View view) {
        webView.loadUrl("https://www.zhipin.com/web/geek/chat");//加载网页
        webView.setWebViewClient(new WebViewClient());//保证在webview中加载，不打开手机浏览器
        webView.getSettings().setJavaScriptEnabled(true);//js交互


        //现场写个demo hook技术
        String str = "abva";
        String s = str.replace("a","A");
        Toast.makeText(this,"结果"+s,Toast.LENGTH_LONG).show();
    }
}